package com.kehutong.wxapi.service;

import com.kehutong.wxapi.request.GetLoginInfoRequest;
import com.kehutong.wxapi.request.GetUserDetail3rdRequest;
import com.kehutong.wxapi.request.GetUserInfo3rdRequest;
import com.kehutong.wxapi.request.GetUserInfoRequest;
import com.kehutong.wxapi.response.GetLoginInfoResponse;
import com.kehutong.wxapi.response.GetUserDetail3rdResponse;
import com.kehutong.wxapi.response.GetUserInfo3rdResponse;
import com.kehutong.wxapi.response.GetUserInfoResponse;
import com.kehutong.wxapi.service.impl.OauthServiceImpl;
import org.coraframework.inject.ImplementedBy;
/**
 * 授权相关服务类
 */
@ImplementedBy(OauthServiceImpl.class)
public interface OauthService {
    /**
     * 获取访问用户身份
     * 该接口用于根据code获取成员信息
     * 请求地址：https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
     * @param getUserInfoRequest 访问用户身份请求对象
     * @return 访问用户身份响应对象
     * @throws Exception 异常
     */
    GetUserInfoResponse getUserInfo(GetUserInfoRequest getUserInfoRequest) throws Exception;


    /**
     * 获取第三方访问用户身份
     * 请求地址：https://qyapi.weixin.qq.com/cgi-bin/service/getuserinfo3rd?suite_access_token=SUITE_ACCESS_TOKEN&code=CODE
     * @param getUserInfo3rdRequest 第三方访问用户身份请求对象
     * @return 第三方访问用户身份响应对象
     * @throws Exception 异常
     */
    GetUserInfo3rdResponse getUserInfo3rd(GetUserInfo3rdRequest getUserInfo3rdRequest) throws Exception;

    /**
     * 获取第三方访问用户敏感信息
     * 请求地址：https://qyapi.weixin.qq.com/cgi-bin/service/getuserdetail3rd?suite_access_token=SUITE_ACCESS_TOKEN
     * @param getUserDetail3rdRequest 第三方访问用户敏感信息请求对象
     * @return 第三方访问用户敏感信息响应对象
     * @throws Exception 异常
     */
    GetUserDetail3rdResponse getUserDetail3rd(GetUserDetail3rdRequest getUserDetail3rdRequest) throws Exception;


    /**
     * 获取第三方扫码登录用户信息
     * 请求地址： https://qyapi.weixin.qq.com/cgi-bin/service/get_login_info?access_token=PROVIDER_ACCESS_TOKEN
     * @param getLoginInfoRequest 获取第三方扫码登录用户信息请求对象
     * @return 获取第三方扫码登录用户信息响应对象
     * @throws Exception 异常
     */
    GetLoginInfoResponse getLoginInfo(GetLoginInfoRequest getLoginInfoRequest) throws Exception;
}
